{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c8366951",
   "metadata": {},
   "source": [
    "# 机器学习建立流程："
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fc1b8829",
   "metadata": {},
   "source": [
    "* 软件包和数据加载\n",
    "    * EDA\n",
    "        * 数据检查\n",
    "        * 处理缺失数据\n",
    "        * 无关信息和冗余信息\n",
    "        * 非数值数据处理\n",
    "    * 数据可视化\n",
    "    * 特征值工程\n",
    "    * 机器学习模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "a7e753bf",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import os\n",
    "# data visualization\n",
    "import seaborn as sns\n",
    "%matplotlib inline\n",
    "from matplotlib import pyplot as plt\n",
    "from matplotlib import style"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "5915adcd",
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus']=False #用来正常显示负号\n",
    "sns.set(font='SimHei')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "973d2b05",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "../dataset/600031.csv\n"
     ]
    }
   ],
   "source": [
    "# 显示当前目录中的文件夹和文件;\n",
    "import os\n",
    "for dirname, _, filenames in os.walk('../dataset/'):\n",
    "    for filename in filenames:\n",
    "        print(os.path.join(dirname, filename))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "638fdc13",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>日期</th>\n",
       "      <th>开盘</th>\n",
       "      <th>收盘</th>\n",
       "      <th>最高</th>\n",
       "      <th>最低</th>\n",
       "      <th>成交量</th>\n",
       "      <th>成交额</th>\n",
       "      <th>振幅</th>\n",
       "      <th>涨跌幅</th>\n",
       "      <th>涨跌额</th>\n",
       "      <th>换手率</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2020-11-09</td>\n",
       "      <td>27.80</td>\n",
       "      <td>27.54</td>\n",
       "      <td>28.14</td>\n",
       "      <td>26.89</td>\n",
       "      <td>856249</td>\n",
       "      <td>2348800992</td>\n",
       "      <td>4.55</td>\n",
       "      <td>0.18</td>\n",
       "      <td>0.05</td>\n",
       "      <td>1.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2020-11-10</td>\n",
       "      <td>27.98</td>\n",
       "      <td>27.32</td>\n",
       "      <td>27.98</td>\n",
       "      <td>26.91</td>\n",
       "      <td>558824</td>\n",
       "      <td>1523209504</td>\n",
       "      <td>3.89</td>\n",
       "      <td>-0.80</td>\n",
       "      <td>-0.22</td>\n",
       "      <td>0.66</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2020-11-11</td>\n",
       "      <td>27.33</td>\n",
       "      <td>28.31</td>\n",
       "      <td>28.86</td>\n",
       "      <td>27.21</td>\n",
       "      <td>1015374</td>\n",
       "      <td>2873205488</td>\n",
       "      <td>6.04</td>\n",
       "      <td>3.62</td>\n",
       "      <td>0.99</td>\n",
       "      <td>1.20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2020-11-12</td>\n",
       "      <td>28.31</td>\n",
       "      <td>28.70</td>\n",
       "      <td>28.88</td>\n",
       "      <td>27.91</td>\n",
       "      <td>718595</td>\n",
       "      <td>2041558432</td>\n",
       "      <td>3.43</td>\n",
       "      <td>1.38</td>\n",
       "      <td>0.39</td>\n",
       "      <td>0.85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2020-11-13</td>\n",
       "      <td>28.28</td>\n",
       "      <td>28.16</td>\n",
       "      <td>28.50</td>\n",
       "      <td>27.60</td>\n",
       "      <td>674807</td>\n",
       "      <td>1888773520</td>\n",
       "      <td>3.14</td>\n",
       "      <td>-1.88</td>\n",
       "      <td>-0.54</td>\n",
       "      <td>0.80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           日期     开盘     收盘     最高     最低      成交量         成交额    振幅   涨跌幅  \\\n",
       "0  2020-11-09  27.80  27.54  28.14  26.89   856249  2348800992  4.55  0.18   \n",
       "1  2020-11-10  27.98  27.32  27.98  26.91   558824  1523209504  3.89 -0.80   \n",
       "2  2020-11-11  27.33  28.31  28.86  27.21  1015374  2873205488  6.04  3.62   \n",
       "3  2020-11-12  28.31  28.70  28.88  27.91   718595  2041558432  3.43  1.38   \n",
       "4  2020-11-13  28.28  28.16  28.50  27.60   674807  1888773520  3.14 -1.88   \n",
       "\n",
       "    涨跌额   换手率  \n",
       "0  0.05  1.01  \n",
       "1 -0.22  0.66  \n",
       "2  0.99  1.20  \n",
       "3  0.39  0.85  \n",
       "4 -0.54  0.80  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 加载数据\n",
    "df_train = pd.read_csv('../dataset/600031.csv')\n",
    "# 显示前5行数据\n",
    "df_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "138fbfed",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train.set_index('日期',inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3af99696",
   "metadata": {},
   "source": [
    "## * 1.EDA："
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8a42ed23",
   "metadata": {},
   "source": [
    "    * 数据检查"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "4b3560a3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 函数：检查DatFrame的丢失百分比;\n",
    "def check_missing_data(df):\n",
    "    total = df.isnull().sum().sort_values(ascending = False)\n",
    "    percent = round(df.isnull().sum().sort_values(ascending = False) * 100 /len(df),2)\n",
    "    return pd.concat([total, percent], axis=1, keys=['Total','Percent'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "4c88be9f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Total</th>\n",
       "      <th>Percent</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>开盘</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>收盘</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>最高</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>最低</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>成交量</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>成交额</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>振幅</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>涨跌幅</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>涨跌额</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>换手率</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Total  Percent\n",
       "开盘       0      0.0\n",
       "收盘       0      0.0\n",
       "最高       0      0.0\n",
       "最低       0      0.0\n",
       "成交量      0      0.0\n",
       "成交额      0      0.0\n",
       "振幅       0      0.0\n",
       "涨跌幅      0      0.0\n",
       "涨跌额      0      0.0\n",
       "换手率      0      0.0"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check_missing_data(df_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6deb2a1d",
   "metadata": {},
   "source": [
    "    * 处理缺失数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "a837ae4b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 用0处理\n",
    "if df_train.isnull().values.any():\n",
    "    df_train.fillna(0.0, inplace = True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4975aa47",
   "metadata": {},
   "source": [
    "    * 无关信息和冗余信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "cbcf654f",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.heatmap(df_train.corr())\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "5b90dab0",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train.drop(['开盘','最高','最低','涨跌额','成交额'],axis=1,inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "a37fe457",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>收盘</th>\n",
       "      <th>成交量</th>\n",
       "      <th>振幅</th>\n",
       "      <th>涨跌幅</th>\n",
       "      <th>换手率</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>日期</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2020-11-09</th>\n",
       "      <td>27.54</td>\n",
       "      <td>856249</td>\n",
       "      <td>4.55</td>\n",
       "      <td>0.18</td>\n",
       "      <td>1.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-11-10</th>\n",
       "      <td>27.32</td>\n",
       "      <td>558824</td>\n",
       "      <td>3.89</td>\n",
       "      <td>-0.80</td>\n",
       "      <td>0.66</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-11-11</th>\n",
       "      <td>28.31</td>\n",
       "      <td>1015374</td>\n",
       "      <td>6.04</td>\n",
       "      <td>3.62</td>\n",
       "      <td>1.20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-11-12</th>\n",
       "      <td>28.70</td>\n",
       "      <td>718595</td>\n",
       "      <td>3.43</td>\n",
       "      <td>1.38</td>\n",
       "      <td>0.85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-11-13</th>\n",
       "      <td>28.16</td>\n",
       "      <td>674807</td>\n",
       "      <td>3.14</td>\n",
       "      <td>-1.88</td>\n",
       "      <td>0.80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               收盘      成交量    振幅   涨跌幅   换手率\n",
       "日期                                          \n",
       "2020-11-09  27.54   856249  4.55  0.18  1.01\n",
       "2020-11-10  27.32   558824  3.89 -0.80  0.66\n",
       "2020-11-11  28.31  1015374  6.04  3.62  1.20\n",
       "2020-11-12  28.70   718595  3.43  1.38  0.85\n",
       "2020-11-13  28.16   674807  3.14 -1.88  0.80"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9615133",
   "metadata": {},
   "source": [
    "    * 非数值数据处理"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "116180c3",
   "metadata": {},
   "source": [
    "无"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "11bf7f76",
   "metadata": {},
   "source": [
    "## * 2.数据可视化："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "72a7f150",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:title={'center':\"Histogram of '查看各列分布情况'\"}, xlabel='换手率', ylabel='Density'>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABIgAAAFPCAYAAAAm+fVoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8/fFQqAAAACXBIWXMAAAsTAAALEwEAmpwYAAC8MElEQVR4nOzdeXhU5dk/8O8smX3NZLKQhF1lEUSxCu6ivgWLC1qtVlP7ira1dan1V1q11iqoLV2Ut759C2qtWLUKVaq1UpfUDQSEAKKsAQIh60xm32cy8/tjTMqShEkyZ86Zme/nurwuMzkz554k83DO/TzPfctSqVQKRERERERERERUtORiB0BEREREREREROJigoiIiIiIiIiIqMgxQUREREREREREVOSYICIiIiIiIiIiKnJMEBERERERERERFTkmiIiIiIiIiIiIihwTRERERERERERF6L777kN9fX3Gx3d3d8Pj8aCxsREffPABnn76abS3tx9znMvlwrp167IZ6hGi0Siam5sBADt27MBnn3123Od4PB5cf/31CAQCAx53+umnI5VKwe/3o6OjAw6HA9/73vfwz3/+Ew6HAy0tLb3HJhKJ4b0RiVGKHQARERERERHR0X7/+98jGo3i//2//wcAqKurw6233orzzjsPALBo0SKcdtppuPTSS8UMM2d+//vf4+WXXwYAvPTSS6itre332EAggLPPPhtbt2494vFoNAqVSgWZTAYAKCkpQUlJSe/3U6kU4vE4VCoVAOCXv/wl3n77beh0OiSTSRw8eBBnnHEGTCYTzGYzTCYTDhw4gMrKyiPOs2rVKjQ3N2PGjBn9xvj+++/jj3/8IyKRCPbu3YuTTz4ZQDoJ9b//+7/QarUwGAyYMmUK1q5dC6PR2PvclStX4v3338dTTz2FYDCIX/3qV3j55Zchl/e/BubNN9+E3W6HwWDo9xgAsFqtkMlk2LJlC9555x0olUrs378fb775JjZu3IhoNIqFCxcimUxi3rx5eOSRRzB16lT893//N9ra2qDT6Xpfa/fu3fjnP/+JkSNHDvh7kQomiIiIiIiIiCjv/OxnP8v4WJ/Ph1dffRXf/va3hQtIQD6fD88++yzWrl2LVCrVm+Dpj8FgQFVV1TGPX3PNNVAoFJDJZNi5cyf0ej1Wr14NuVzee/z48eOxePFiAMAdd9yB2tpaqFQquN1uvPDCC5gzZw6A/ySTehI7Pfx+P55++mkkk8neREgkEoHD4cDrr7/ee54LLrgAF1xwAd59910899xzeP7553tf47333sNTTz2Fv/71r1Cr1UckdUKhEJ555hk8+eSTANIrfsrKyrB06VLcdtttvcf985//xG9/+9vehM2BAwcwYsQIXHHFFb3HpFKp3oSU1WrF008/DYVCgQceeAAXX3wxtm3bBr1eD7/fj0OHDqGrqwtTpkyBXC6HXC7H9773Pfzwhz/EqlWroFQqsWjRIpx++um9rz9r1qwjEnD9/V6kggkiIiIiIiIiKmg+nw/Lly/P6wSRxWKBRqPJ+DmTJk065rHXX38dyWQSjz/+OE477TQkk0nMnDkTzzzzDL797W9j9uzZvccmEgnI5XKMHz8earUaL7zwAubNm4cTTjgBQDq5EolEEI/HEYvFoFKpkEqlcP/99+O///u/8c477+CJJ56AxWLpTaT0lRz58MMP4fV68cgjjwAArr32Wuj1+iPe6+EJscWLF+Oss8464v394he/wNe//nXodDrcdNNNAIBLL720d3XZ0qVL0dzcjIcffhgLFizAb37zm2Pi+Oyzz3q3y9XW1mLnzp24//77oVQq8fvf/x6zZs3C5MmT0d3djfb2dlRWVuJrX/saOjo6kEql+l29dHQyr6/fi1QwQURERERERER556c//SnOOOMMXHXVVb2P/c///A9eeeUVAMBtt92GG264Affccw/WrFkDr9eLs88+GxMmTMAzzzwDAHj66afxl7/8BWq1Gvfddx/OP/98AMBjjz2GN998E5MmTUI0GsVXv/pVfPOb38SsWbPwyCOP4A9/+ANGjBiBX/3qV73nXbFiBRQKBX74wx/iyiuvxKxZs3Dqqadi/fr1mDdvHlauXImf/OQnuPLKK/t8P8lkEosXL8abb74Jq9WKRYsWYerUqQPGP5Df/e53x7z+hg0b8L//+7+YMWMG7r77bixatAh6vR7Lli3Dfffdh6VLl+Lyyy/HlVdeiY8++ggvvvgiSkpKEAqFsHv3bkybNg2bNm3qfc2eVUTf+973cOGFF2LdunUwm8249dZbcdZZZ+GOO+6AXq/HFVdcgf/6r/86JkaXy9WbSDKZTPjZz36Ga665pt8VUq+99ho++eST3t9xj4qKCixfvhw333wz1q9fjwcffBAVFRUAgG3btuG1117DK6+8Arlc3m9tpD179uCkk07Ctm3b8J3vfAcrV67EW2+9BblcjrFjx6KpqQlNTU1IJpO4+OKLe7fV3XzzzQDSW+P6kkwmB/y9SAkTRERERERERCRJL7zwAl577TUAgNfrHfBYj8eDp556CmvXrkUikcDPf/5z3HDDDfjtb3+LQ4cO4Vvf+tYRBZnXrl2LVatW4e9//zscDgduuukm/P3vf4fX68W//vUvvP/++1iwYAEuueQSXHPNNb3PW7x4Me6//35MmDABANDa2oqNGzfiX//6F/x+P6666qreJNAll1yCeDyOYDCIH/zgB1i/fn2/CaK//e1v2LFjB9599100NDTghz/8IVavXt1v/IPV0NCA//3f/8XkyZOxevVqvPfee/B4PFi/fj3UajUikQhuvPFGHDx4EEajEZdffjkuv/xypFIp3HPPPVCr1X3We7ruuut6EzozZ87EzJkz0dzcjLfffhsqlQqxWAw7duzAhg0bMHXq1CNWBj322GO46KKLUF1djREjRqCrqwtjxoyB2+0+5jwtLS34/e9/j5tvvhmXXnopQqEQlEoltFotgHSy6fHHH8c777zTW0Np7969+MEPfgCPx4O6ujoA6b+Tnm1mBw8exMsvv4wTTzwRSqUSp59+OlauXAkA+PrXv44bbrjhmATPD3/4Q5x55pm9X3d2dkImk6GmpgY//OEPe88di8VQXl5+3O2AUiLpBFE8HscPfvADzJ8//4hfQCZuvvlmxONxAEBXVxdOP/10PPzww0KESURERERERAK44YYbjihSPRCj0YjRo0fjkUcewbnnnotf/vKXAx7/4Ycf4vLLL4fZbIbZbMbUqVOxceNGTJ48GclkEt3d3YjH48esDLnllluOqDMzYsQI3HffffjTn/6E9evXw+l09n5v8uTJeP/99zF58mTIZDKkUqkB47n22muhVqsxc+ZMGAwG7Nq1C1OmTBnwfWTq9NNPx/PPP4+XX34ZPp8Pl1xyyRHfX7ZsGU477TR885vf7H0sGo3i/vvvx7/+9S8sWrQIFovliOf85Cc/wfXXXw8gvUVr9erV2Lx5M+x2O6666ir88Ic/BAB88skn+Mc//oGHHnoIGo0GL730Enbu3ImdO3fiZz/7Gb7xjW/ghhtuwLhx446o2XO46upqrF69GiqVCjfeeCPuuusuXHbZZbj44osBALNnz8bkyZN739cnn3yCH//4x7jjjjvw4osv4u9//zsA4Lzzzuv9/7q6ut6EzuG1iXocOnQIv/3tb3u/fvHFFxEMBo845vHHH8f48ePxi1/8AgBwzjnnwO12o729HXfccUffvwyJkmyCKJFI4Pvf/z7a2tqG9Pw//elPvf9/22234cYbb8xWaERERERERCQxCoUCK1euxNq1a/H+++9jyZIl+Mc//tGbADienpUeRqMR5eXluOSSSzBp0qRjEgennHLKEV9v3LgRP/3pT3HHHXdg3rx5mDVr1jGvmekqksOPE3LlSTAYPCKRBaSTQYfbsmULHnjggd7aOy+88MIxyZueRRlAuvvXV77yFZx11lm46667cODAATz++OO93z948CD+9re/obKyEiqVClOnTsWrr76KkpIS/N///R+++c1v4te//jWAdFHrvrZs9fwuE4kENm/ejPvvv7/3e06nE+Xl5b1fWywWPPbYY5g8eTJefPHFfn8Wx/s579y5s/f/XS7XEcdv374dGzduxEMPPQQgvWLp2muv7XMFVD6QbIIIABYuXIgnnnii9+v169djyZIlSCQSuPjii/Gd73znuK/xySefwG6348QTTxQwUiIiIiIiIhLT/v37ce+99+LPf/4zvvKVr+Dcc8+Fx+NBeXk5LBYL3G43wuEwgHRS4LzzzsNjjz2G6667Dg6HA5999hkefvhhvP/++zjllFPwwAMPZHTerVu3YurUqbj88svx17/+dcjxn3feeVi5ciUuvvhibNmyBX6/HyeddNKQX68/sVgMW7ZsQXNz8xGPHzp06IiEj06nw/e+9z187WtfwyeffIJzzjnniFbzALBv377e/6+trUVtbS22bNmCM888E3/4wx+OOPb6669HSUnJEW3gexJOn3zyCaZMmdJbJHvs2LG9xab78sILL+CUU07pTQgFAgFoNBoolf9JcUycOBFAekdRX8LhMHw+HxQKRb/niUQiePPNN3u/bmlp6f3/VCqFhx9+GPfccw9UKhV27doFh8OBiRMn4osvvug97sCBA6ipqRnwPFIh2QSRUqnsLfoEpH/4P/7xj/HSSy+hqqoKl112GS677DIsXboUe/fuPeK5S5YsQWlpKQDgqaee6s3mERERERERUWEaM2YMTj/9dFx00UUAgBtvvLE3gWAwGHDrrbfikksuQTKZxMsvv4yz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xf3Eqk6dOrFs2TK++eYb97KXhoqZzWb+8Ic/8PLLLwNVj1+81hw1DoeDgQMHYjKZ2LFjBwD33HOPu2othBDX0rVrV1auXMmIESNo3rw5Z86cITQ01P16REQEU6ZMwdfXl0cffbTaui6XC51Ox5gxYwgJCWHp0qXMmDGDiRMnyqTrQohrSktLY+3ate65PX7729+6X+vYsSNz585FURRUKpX7aWS9evViwYIFAPTp04e3336bTp060apVK+6//34A9u3bV+1zJEcJIa7H6XQSExPD3XffTf/+/Xnqqafw8/PjySefJD09nSNHjhAXF4eiKISFhbFu3bpq61/vDiKHw8Hf//53AgMDgarhZgsWLCAsLIzHH3/cPVdR+/bt3UNqReMjfzVxSw4cOEC3bt0oLS3l8OHDxMXFYbFYyMzMJCEhgdDQULZv306LFi2IiIhwr9epUyfeeust/P39r3oXClQNX5s2bZr7TqGAgAAA9+SOkyZNquetE0I0Zr9+auLhw4fp2rWr+7HQw4cP59NPP2XVqlWkp6e7l/vss8+Ij49HpVKxa9cu/P39ycnJ4fvvv6eoqKghN0EI0chs2LCh2jxAlw8NKygooEWLFqSmprrn8QAoLy9n8+bNNG/eHLPZzIYNG3j//feZM2cOvXv3RqVSuSe6BslRQogbi4uLIy4ujtTUVACWL18OwLp161CpVJSUlPDBBx/g5+d30+/9448/8tFHH7mL3ACZmZnodDq+//579++cTidJSUkMGjSollsjPEEKROKm2Ww2UlNTmTBhAn/84x8pKiqid+/ejB49mscff5wffviBlJQUfv75Z3r27MkDDzzAnj17WLt2Lfn5+SxZsoQTJ06QnJxMx44d6d27N61bt6Zt27bo9XoyMjJ455133EM/Lg0xO3XqFFB1G3enTp3w9/f32D4QQni/S088TE9PZ/z48Rw+fJjDhw8THh6O0WhkyZIljBo1ivbt2/PCCy+QnJxMy5Ytef311zl48CA6nY68vDw2b95MaWmph7dGCOGtbDYbW7ZscQ+pKCwsdBeICgsLefbZZ3nhhReYN28ec+bMISMjg7Fjx9KsWTPS09NJSEhg+vTpjB07loSEBNq0acP8+fN5+eWX6dSpk+QoIcRNu3x46urVq/noo49ISUkhLS2Np59+mnfeecd98f2SPXv2sH379mvejXhprtjLXbqDKDk5ue43QniEFIjETVu/fj133XUXcXFxfPzxx+zYsYNp06bxpz/9iX79+tG3b1/Gjh1LRkYGY8aM4ZFHHuHee+9l+PDh9OnTB5VKRYcOHRgwYADr169nw4YNfPnllyxbtoz8/HymTZtGcHCwu3F1abLHS/9XFIXnnnuO//7v/yYkJMRj+0EI4b2efvppQkNDSUtLIzo6moCAAI4ePUp2djbDhw/niSee4LnnnqNjx4507twZu93uvlJfWVnJ1KlT3UM8AB577LFqV/KFEOKSn3/+me7du6PT6Th58iTDhg0jOTmZCxcuEBwczHvvvUdCQgInTpwAqub1u/fee/Hx8aG4uJjk5GQeeughRo4cCcDEiRMZPXo069atY+DAgWi1WslRQogamzNnDgcPHkRRFIYPH05cXByff/45ZrOZ//iP/6C8vJyhQ4fywQcf0KVLF/d6qamplJaWuh80VBOXHgoibh8q5Wqz3wlxA5WVle7bC10uF0VFRdWGddjtdvLz82nWrJl7zL0QQjSUiooK9/xnRUVFBAUFkZeXR3BwsHtMvMvlQq1WX7GuxWJBr9dXu4VaCCGu5/J8cvm/azIPx7lz59wP9rjEZrNd82mgkqOEENeTkZFBSEgIvr6+nD9/nujo6CuWyc7OlqcfiquSApEQQgghhBBCCCFEE3flpVMhhBBCCCGEEEII0aRIgUgIIYQQQgghhBCiiZMCkRBCCCGEEEIIIUQTJwUiIYQQQgghhBBCiCZOCkRCCCGEEEIIIYQQTZwUiIQQQgghhBBCCCGauP8PBas+9BUh4wwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1440x360 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, (ax1, ax2, ax3, ax4) = plt.subplots(1,4, figsize=(20,5))\n",
    "\n",
    "plt.title(\"Histogram of '查看各列分布情况'\")\n",
    "sns.kdeplot(data=df_train['成交量'], shade=True, ax=ax1)\n",
    "\n",
    "sns.kdeplot(data=df_train['振幅'], shade=True, ax=ax2)\n",
    "\n",
    "sns.kdeplot(data=df_train['涨跌幅'], shade=True, ax=ax3)\n",
    "\n",
    "sns.kdeplot(data=df_train['换手率'], shade=True, ax=ax4)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "40c2a7ec",
   "metadata": {},
   "source": [
    "## * 3.特征值工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "5c1af99e",
   "metadata": {},
   "outputs": [],
   "source": [
    "datalist = list()\n",
    "for i in range(0, len(df_train)):\n",
    "    if df_train.iloc[i, list(df_train.columns).index('涨跌幅')] > 0:\n",
    "        datalist.append(1)\n",
    "    else:\n",
    "        datalist.append(0)\n",
    "df_train['涨跌'] = datalist"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "5ce76a24",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 特征值处理\n",
    "# 特征离散化\n",
    "def fun(x):\n",
    "    if 0<=abs(x)<2:\n",
    "        return 1\n",
    "    elif 2<=abs(x)<4:\n",
    "        return 2\n",
    "    elif 4<=abs(x)<6:\n",
    "        return 3\n",
    "    elif 6<=abs(x)<8:\n",
    "        return 4\n",
    "    else:\n",
    "        return 5\n",
    "    \n",
    "df_train['振幅'] = df_train['振幅'].map(fun)  \n",
    "df_train['换手率'] = df_train['换手率'].map(fun)  \n",
    "df_train['涨跌幅'] = df_train['涨跌幅'].map(fun)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "7da71479",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 移动平均处理\n",
    "def mean_handle(total_list, cycle):\n",
    "            return [np.mean(total_list[i:i + cycle]) for i in range(len(total_list))]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "efb16f6b",
   "metadata": {},
   "outputs": [],
   "source": [
    "cycle = 15"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "e8074c91",
   "metadata": {},
   "outputs": [],
   "source": [
    "for column in ['收盘','成交量']:\n",
    "            df_train[column] = mean_handle(df_train[column].tolist(), cycle)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "3a336003",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>收盘</th>\n",
       "      <th>成交量</th>\n",
       "      <th>振幅</th>\n",
       "      <th>涨跌幅</th>\n",
       "      <th>换手率</th>\n",
       "      <th>涨跌</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>日期</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2020-11-09</th>\n",
       "      <td>28.743333</td>\n",
       "      <td>704892.533333</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-11-10</th>\n",
       "      <td>28.954667</td>\n",
       "      <td>713645.333333</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-11-11</th>\n",
       "      <td>29.282000</td>\n",
       "      <td>737789.066667</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-11-12</th>\n",
       "      <td>29.554000</td>\n",
       "      <td>727904.266667</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-11-13</th>\n",
       "      <td>29.751333</td>\n",
       "      <td>724724.733333</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   收盘            成交量  振幅  涨跌幅  换手率  涨跌\n",
       "日期                                                    \n",
       "2020-11-09  28.743333  704892.533333   3    1    1   1\n",
       "2020-11-10  28.954667  713645.333333   2    1    1   0\n",
       "2020-11-11  29.282000  737789.066667   4    2    1   1\n",
       "2020-11-12  29.554000  727904.266667   2    1    1   1\n",
       "2020-11-13  29.751333  724724.733333   2    1    1   0"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "422e8452",
   "metadata": {},
   "outputs": [],
   "source": [
    "for colunm in ['收盘', '成交量']:\n",
    "    datalist = list()\n",
    "    datalist.append(0)\n",
    "    for i in range(1, len(df_train[colunm])):\n",
    "        datalist.append(df_train[colunm].tolist()[i] - df_train[colunm].tolist()[i - 1])\n",
    "    df_train[colunm] = datalist"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "792ea2c2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>收盘</th>\n",
       "      <th>成交量</th>\n",
       "      <th>振幅</th>\n",
       "      <th>涨跌幅</th>\n",
       "      <th>换手率</th>\n",
       "      <th>涨跌</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>日期</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2020-11-09</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-11-10</th>\n",
       "      <td>0.211333</td>\n",
       "      <td>8752.800000</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-11-11</th>\n",
       "      <td>0.327333</td>\n",
       "      <td>24143.733333</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-11-12</th>\n",
       "      <td>0.272000</td>\n",
       "      <td>-9884.800000</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-11-13</th>\n",
       "      <td>0.197333</td>\n",
       "      <td>-3179.533333</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  收盘           成交量  振幅  涨跌幅  换手率  涨跌\n",
       "日期                                                  \n",
       "2020-11-09  0.000000      0.000000   3    1    1   1\n",
       "2020-11-10  0.211333   8752.800000   2    1    1   0\n",
       "2020-11-11  0.327333  24143.733333   4    2    1   1\n",
       "2020-11-12  0.272000  -9884.800000   2    1    1   1\n",
       "2020-11-13  0.197333  -3179.533333   2    1    1   0"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "01f84fe9",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "422f45a9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MinMaxScaler(feature_range=(-1, 1))"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 归一化\n",
    "scaler = MinMaxScaler(feature_range=(-1, 1))\n",
    "scaler.fit(df_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "313d1847",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = scaler.transform(df_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "33303531",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = pd.DataFrame(df_train,columns=['收盘','成交量','振幅','涨跌幅','换手率','涨跌'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "784242c0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>收盘</th>\n",
       "      <th>成交量</th>\n",
       "      <th>振幅</th>\n",
       "      <th>涨跌幅</th>\n",
       "      <th>换手率</th>\n",
       "      <th>涨跌</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.186441</td>\n",
       "      <td>-0.046723</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.069411</td>\n",
       "      <td>-0.010257</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.209847</td>\n",
       "      <td>0.053864</td>\n",
       "      <td>0.5</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.142857</td>\n",
       "      <td>-0.087905</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.052462</td>\n",
       "      <td>-0.059970</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         收盘       成交量   振幅  涨跌幅  换手率   涨跌\n",
       "0 -0.186441 -0.046723  0.0 -1.0 -1.0  1.0\n",
       "1  0.069411 -0.010257 -0.5 -1.0 -1.0 -1.0\n",
       "2  0.209847  0.053864  0.5 -0.5 -1.0  1.0\n",
       "3  0.142857 -0.087905 -0.5 -1.0 -1.0  1.0\n",
       "4  0.052462 -0.059970 -0.5 -1.0 -1.0 -1.0"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "fa5d8870",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "3132bbe9",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# 重新组织数据；保留具有有用功能的列;\n",
    "input_cols = ['收盘','成交量','振幅','涨跌幅','换手率']\n",
    "output_cols = ['涨跌']\n",
    "X_train,X_test,y_train,y_test = train_test_split(df_train[input_cols],df_train[output_cols],train_size=0.85)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "2d867369",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((214, 5), (38, 5), (214, 1), (38, 1))"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape,X_test.shape,y_train.shape,y_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "d0707dd3",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn import linear_model\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.svm import SVC, LinearSVC\n",
    "from sklearn.naive_bayes import GaussianNB"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "2a323c92",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6495327102803738"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Logistic regression;\n",
    "\n",
    "model = LogisticRegression()\n",
    "model.fit(X_train,y_train.values.ravel())\n",
    "y_pred_lr=model.predict(X_test)\n",
    "model.score(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "32065012",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7990654205607477"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# KNN\n",
    "model = KNeighborsClassifier(n_neighbors = 3) \n",
    "model.fit(X_train, y_train.values.ravel())  \n",
    "y_pred_knn = model .predict(X_test)  \n",
    "model.score(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "4b00d757",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6214953271028038"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Gaussian naive bayesian\n",
    "from sklearn.naive_bayes import GaussianNB\n",
    "model= GaussianNB()\n",
    "model.fit(X_train,y_train.values.ravel())\n",
    "y_pred_gnb=model.predict(X_test) \n",
    "model.score(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "65683db5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6588785046728972"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Linear SVM\n",
    "model  = LinearSVC()\n",
    "model.fit(X_train, y_train.values.ravel())\n",
    "\n",
    "y_pred_svc = model.predict(X_test)\n",
    "model.score(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "bd8e8346",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Random forest\n",
    "model  = RandomForestClassifier(n_estimators=100)\n",
    "model.fit(X_train, y_train.values.ravel())\n",
    "\n",
    "y_pred_rf = model.predict(X_test)\n",
    "model.score(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "a3387938",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Decision tree\n",
    "model = DecisionTreeClassifier() \n",
    "model.fit(X_train, y_train.values.ravel())\n",
    "y_pred_dt = model.predict(X_test) \n",
    "model.score(X_train,y_train)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "deep",
   "language": "python",
   "name": "deep"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
